package cn.lizemin.state.version0.entity;

/**
 * @author lzm
 * @version 1.0
 * @description: 交通灯的规则：
 * 黄-->红
 * 红-->黄
 * 绿-->黄
 * 红-->绿
 * @date 2022/4/24 22:09
 *
 * 设计缺陷：
 *   充斥着大量的状态判断，如果不只是三种灯，而是10种灯，那么这里的if-else将会十分复杂
 *
 *   从扩展性上说：
 *   如果增加一个灯，需要在当前类中增加一个方法，而且前面其他所有的方法都需要改动，每个方法都需要
 *   增加一个if状态判断
 *
 *   解决方法：
 *   将每种状态抽取成一个单独的类，以后新增一个交通灯，只需要增加一个类就可以了，修改也比较集中
 *
 */
public class TrafficLight {

    /**交通灯的当前状态*/
    private State state;


    public void setState(State state) {
        this.state = state;
    }

    public TrafficLight() {
        this.state = new Red();/**交通灯的初始状态：为红灯*/
    }

    /**
     * 切换为红灯
     *
     * 这里的this是为了传递当前的状态，我一开始没有加入this，结果导致切换为红灯了，
     * 但是并没有改变状态
     */
    public void switchToRed() {
        state.switchToRed(this);
    }

    /**
     * 切换为绿灯
     */
    public void switchToGreen() {
        state.switchToGreen(this);
    }

    /**
     * 切换为黄灯，黄灯和红灯都可以直接切换
     */
    public void switchToYellow() {
        state.switchToYellow(this);

    }



}
